let oldArrayProto = Array.prototype; //获取数组的原型对象
let arrayMethods = Object.create(oldArrayProto); //创建一个新对象  原型指向数组的原型对象
// 重写数组方法 7个可以改变数组本身的方法
let methods = ["push", "pop", "shift", "unshift", "splice", "sort", "reverse"];
// 重写数组方法 切片
methods.forEach((method) => {
  arrayMethods[method] = function (...args) {
    console.log(method, "方法被调用了");
    // 调用数组的原始方法
    let result = oldArrayProto[method].call(this, ...args);
    // 对新增的元素进行响应式处理
    let inserted;
    let ob = this.__ob__;
    switch (method) {
      case "push":
      case "unshift":
        inserted = args; // 新增的元素
        break;
      case "splice":
        inserted = args.slice(2); // 新增的元素 第一个参数是删除的索引 第二个参数是删除的个数 第三个参数是新增的元素
        break;
    }
    if (inserted) {
      ob.observeArray(inserted);
    }
    return result;
  };
});
export default arrayMethods;
